/*
  接口 ： 接口的概念可以联想一下我们生活中的一些接口例子，接口都是规定的类型，如几个口，功率
    等等，  程序中的接口也是一样的 ，  起到的就是一种约束的作用

    接口的类型有很多 先学习其中的  属性接口
      使用了接口之后数据就要严格按照接口的数据来  如变量类型  变量名等等
*/

// 属性接口 - -  TS中处理json对象属性的一种接口

// 使用 interface 定义
interface nameStyle {
  /*
    使用interface定义的接口，里面的接口成员要使用分好隔开 不能使用普通对象的逗号来隔开

    在给调用和使用接口传递数据的时候，接口里面的对象是一样要严格准守的，
      接口成员的顺序可以不一致 但是变量之间一定要严格一致
  */

  firstName: string
  selcondName: string
  lastName?: string // ?: 表示可选 可有可无的意思
}
function setName(name: nameStyle) {
  console.log(`${name.firstName} ${name.selcondName} ${name.lastName}`)
}
let myName = {
  firstName: '叶',
  selcondName: '思',
  lastName: '豪',
}
setName(myName) // 叶 思 豪
let falseName = {
  name: 'Jimmy',
  firstName: 'J',
}
// setName(falseName)  // 报错 因为不符合接口所设置的规范  一定要严格遵守

let trueName = {
  firstName: '张',
  selcondName: '雪',
}
setName(trueName) //  张 雪 undefined
/*
  总结：
    属性接口就是给我们用来规范的 可以维护程序 提前让我们预知到错误

    一旦使用了接口， 那么传递的参数就一定要按照接口的规范来严格执行，其中 ?; 符号定义的属性
      表示的是可选接口  这种属性如果不写也可以
*/
